package edu.zut.main.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketDemo1 {
}

//基于tcp的客户端与服务器通信  一对一通信     一对多通信   一个服务器  多个客户端（自行模拟+线程）
class Client{

    public static void main(String[] args) throws IOException {

        //通过ip + 端口连接服务器,并创建一个socket套接字对象
        Socket socket = new Socket("127.0.0.1", 9999);
        System.out.println("客户端连接服务器成功");
        //向服务器发送一条信息   需要一个输出流
        OutputStream os = socket.getOutputStream();
        os.write("nice to meet you,I am is Client!!!!!!".getBytes());
        //无效输出流
        socket.shutdownOutput();

        //获取一个输入流，接收服务器反馈的信息
        InputStream is = socket.getInputStream();
        byte[] buffer = new byte[521];
        int len;
        while ((len = is.read(buffer)) != -1){
            System.out.println(new String(buffer,0,len));
        }

        //关闭资源
        is.close();
        os.close();
        socket.close();
    }

}

//服务器
class Server{

    public static void main(String[] args) throws IOException {
        //根据端口创建一个ServerSocket对象   ip默认就是当前主机
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("等待客户端连接......");
        //监听客户端连接,如果有客户端通过ip+port访问服务器上的应用程序，
        // 连接自动建立起来，并返回一个新的socket对象
        Socket socket = serverSocket.accept();
        System.out.println("连接已成功......");
        //服务器接收客户端发送的数据
        InputStream is = socket.getInputStream();

        int len;
        byte[] buffer = new byte[1024];
        while ((len = is.read(buffer)) != -1){
            System.out.println(new String(buffer,0,len));
        }
        //无效输入流
        socket.shutdownInput();

        //服务器也可以返回数据给客户端
        OutputStream os = socket.getOutputStream();
        os.write("nice to meet you too,i am is Server!!!!!".getBytes());

        //关闭资源
        os.close();
        is.close();
        socket.close();
        serverSocket.close();
    }

}